package com.cskaoyan.javase.overload._1basic;

/**
 * 如果我想在很多方法中，唯一地找到一个方法，需要明确什么？
 * 为什么方法的重载要求形参列表不同呢？
 *
 * 编译器确定调用某个方法，首先要确定方法的名字。
 * 如果多个方法组成方法重载，方法名相同，那就需要看形参数据类型和实参数据类型的对应关系。（说白了就看参数列表）
 * 当然在看形参数据类型和实参数据类型的对应关系时，不要忘记它们可以发生数据类型的自动类型转换。
 *
 * 当存在自动类型转换而导致的多个方法都能够同时被匹配时，要遵循“就近原则”
 * 就近原则指的是：当有多个选项都能正确匹配时，那么优先选择"最近"的。
 * 重点是要能够找到一个判断的标准来确定"何为最近"。
 * 在方法调用的自动类型转换中，不转换是最近的
 * 转换最少的是最近的
 *
 * 在方法调用时，如果出现就近原则不好判断究竟调用谁的情况，就会出现模糊的调用，导致编译报错。
 *
 * @since 09:47
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // test3();
        // test2(1, 1);
        // test();
        // test(10);
        // test(10,0.1);

        // test(10);

        // Ambiguous method call: both 'Demo.test(int, double)' and 'Demo.test(double, int)' match
        // test(10,10);
    }

    public static void test() {
    }

    // public static void test(int a) {
    // }

    public static void test(double a) {
    }

    public static void test(long a) {
    }

    public static void test(int a, double b) {
    }

    public static void test(double a, int b) {
    }

    public static void test2(int a, int b) {
    }
}
